package aceim.app.utils;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import aceim.api.utils.Logger;
import aceim.api.utils.Logger.LoggerLevel;
import aceim.app.Constants;
import aceim.app.Constants.OptionKey;
import aceim.app.dataentity.AccountOptionKeys;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class OptionsReceiver extends BroadcastReceiver {
private final List<OnOptionChangedListener> mListeners = new CopyOnWriteArrayList<OnOptionChangedListener>();
public OptionsReceiver(OnOptionChangedListener listener) {
if (listener != null) {
registerListener(listener);
}
}
public void registerListener(OnOptionChangedListener listener) {
mListeners.add(listener);
}
public void unregisterListener(OnOptionChangedListener listener) {
mListeners.remove(listener);
}
@Override
public void onReceive(Context context, Intent intent) {
OptionKey key = (OptionKey)intent.getParcelableExtra(Constants.INTENT_EXTRA_OPTION_KEY);
byte serviceId = intent.getByteExtra(Constants.INTENT_EXTRA_SERVICE_ID, (byte) -1);
if (key == null || (key instanceof AccountOptionKeys && serviceId < 0)) {
Logger.log("OptionsReceiver got broken intent!", LoggerLevel.INFO);
return;
}
Object value = intent.getExtras().get(Constants.INTENT_EXTRA_OPTION_VALUE);
for (OnOptionChangedListener listener : mListeners) {
listener.onOptionChanged(key, value.toString(), serviceId);
}
}
public interface OnOptionChangedListener {
void onOptionChanged(OptionKey key, String value, byte serviceId);
}
}